package com.nnnu.wsnackshop.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.nnnu.wsnackshop.pojo.entity.UserCoupons;
import com.nnnu.wsnackshop.pojo.vo.CouponVO;

import java.util.List;

/**
 * <p>
 * 用户优惠券 服务类
 * </p>
 *
 * @author zk
 * @since 2025-06-24
 */
public interface IUserCouponsService extends IService<UserCoupons> {

    /**
     * 为新用户发放优惠券
     *
     * @param userId 用户ID
     * @return 发放的优惠券列表
     */
    List<CouponVO> issueNewUserCoupons(Integer userId);

    /**
     * 异步为新用户发放优惠券
     *
     * @param userId 用户ID
     */
    void issueNewUserCouponsAsync(Integer userId);

    /**
     * 检查用户是否是首次登录（是否已经领取过新人券）
     *
     * @param userId 用户ID
     * @return 是否是首次登录
     */
    boolean isFirstLogin(Integer userId);

    /**
     * 获取用户的可用优惠券列表
     *
     * @param userId 用户ID
     * @return 用户可用的优惠券列表
     */
    List<CouponVO> getUserAvailableCoupons(Integer userId);

    /**
     * 使用优惠券
     *
     * @param userId       用户ID
     * @param userCouponId 用户优惠券ID
     * @param orderId      订单ID
     * @param orderNo      订单编号
     * @return 是否使用成功
     */
    boolean useCoupon(Integer userId, Integer userCouponId, Long orderId, String orderNo);

    /**
     * 退还优惠券
     *
     * @param userId  用户ID
     * @param orderId 订单ID
     * @return 是否退还成功
     */
    boolean returnCoupon(Integer userId, Long orderId);
}